The notion of debugging systems to track down errors has existed as long as (and arguably, even longer than) systems development itself. Indeed, although many credit a Harvard faculty member with coining the term in 1946 to refer to a moth that crashed an early computer by getting trapped in a relay, Thomas Edison had actually used the term in his notebooks, in the 1870s, to refer to mechanical design problems he was experiencing. Today, the term “bug” is commonly used to refer to software errors, or logical errors in a computer program that prevent the program from performing as expected, and the act of “debugging” programs is an often painful and tedious chore.
Debugging a program is often tedious because the developer is usually given very little information to deduce the source of the problem. The developer might simply see that the program “hangs,” or enters into a nonresponsive state, with little or no indication as to what is causing the hang. A program intended for calculating a value might simply return the wrong value.
Improvements in technology make the debugging task even more difficult. Computer programs are becoming more and more complex, accomplishing more and more when they work well, but the increased complexity also increases the likelihood for error. Furthermore, general purpose computer systems are often used to coordinate the concurrent execution of a plurality of programs. For example, a personal computer running the “WINDOWS™” operating system (trademark Microsoft Corporation, Redmond, Wash.) might have a word processor program, a spreadsheet program, and an Internet browser program all open at the same time. These independent programs share the computer's resources, and while they might each run just fine if they had the computer all to themselves, they may run into difficulties when they try to coordinate the use of the computer's resources.
Improvements in hardware technology may also complicate matters. For example, many personal computers now rely on virtual memory management systems to artificially increase the amount of RAM (random access memory) space available to the operating system. When a program runs on a system with a virtual memory manager, the program can never be sure of the precise physical areas of memory being used, and this lack of information can make it more difficult for the developer to isolate a bug.
Debugging can be even more difficult on non-general-purpose computers, such as home game consoles. Because game consoles, such as the “XBOX®” and “XBOX 360™” (trademark Microsoft Corporation, Redmond, Wash.), are often optimized for a particular area of use (e.g., home entertainment), they may lack some of the more robust error-checking and debugging capabilities found in other general-purpose computers.